package com.zsrt.day20170506.synproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
*@author jzh
*@创建时间 2017年5月6日下午6:24:23
*类说明：
*/
public class SyncProxy implements InvocationHandler{
	/**
	 * 用object代表所有对象，实现动态代理
	 */
	Object targetObject;
	
	
	public SyncProxy(Object targetObject) {
		this.targetObject = targetObject;
	}


	
	/**
	 * 获取一个动态代理的对象，并返回
	 * @return
	 */
	public Object getInstance(){
		
		ClassLoader loader = targetObject.getClass().getClassLoader();
		Class<?>[] interfaces = targetObject.getClass().getInterfaces();
		InvocationHandler h=this;
		Object proxy = Proxy.newProxyInstance(loader, interfaces, h);
		return proxy;
	}
	
	
	
	/**
	 * 回调这个方法，所以在这个方法里写自己想实现的逻辑
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		
		System.out.println("记录开始时间");
		System.out.println(System.currentTimeMillis());
		Object object = method.invoke(targetObject, args);
		System.out.println("记录结束时间");
		System.out.println(System.currentTimeMillis());
		
		
		return object;
	}
	

}
